{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# 多步多变量时间序列的LSTM模型预测——基于Keras"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "##### lwb-xmu"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## 一、模型准备"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 1.1 加载需要的包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "from math import sqrt\n",
    "from numpy import concatenate\n",
    "from matplotlib import pyplot\n",
    "from pandas import read_csv\n",
    "from pandas import DataFrame\n",
    "from pandas import concat\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 1.2 定义将时间序列预测问题转化为监督学习问题的函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):\n",
    "    n_vars = 1 if type(data) is list else data.shape[1]\n",
    "    df = DataFrame(data)\n",
    "    cols, names = [], []\n",
    "    #i: n_in, n_in-1, ..., 1，为滞后期数\n",
    "    #分别代表t-n_in, ... ,t-1期\n",
    "    for i in range(n_in, 0, -1):\n",
    "        cols.append(df.shift(i))\n",
    "        names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    #i: 0, 1, ..., n_out-1，为超前预测的期数\n",
    "    #分别代表t，t+1， ... ,t+n_out-1期\n",
    "    for i in range(0, n_out):\n",
    "        cols.append(df.shift(-i))\n",
    "        if i == 0:\n",
    "            names += [('var%d(t)' % (j+1)) for j in range(n_vars)]\n",
    "        else:\n",
    "            names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    agg = concat(cols, axis=1)\n",
    "    agg.columns = names\n",
    "    if dropnan:\n",
    "        agg.dropna(inplace=True)\n",
    "    return agg"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 1.3 定义准备数据的函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "def prepare_data(filepath, n_in, n_out=30, n_vars=4, train_proportion=0.8):\n",
    "    #读取数据集\n",
    "    dataset = read_csv(filepath, encoding='utf-8')\n",
    "    #设置时间戳索引\n",
    "    dataset['日期'] = pd.to_datetime(dataset['日期'])\n",
    "    dataset.set_index(\"日期\", inplace=True)\n",
    "    values = dataset.values\n",
    "    #保证所有数据都是float32类型\n",
    "    values = values.astype('float32')\n",
    "    #变量归一化\n",
    "    scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "    scaled = scaler.fit_transform(values)\n",
    "    #将时间序列问题转化为监督学习问题\n",
    "    reframed = series_to_supervised(scaled, n_in, n_out)\n",
    "    #取出保留的变量\n",
    "    contain_vars = []\n",
    "    for i in range(1, n_in+1):\n",
    "        contain_vars += [('var%d(t-%d)' % (j, i)) for j in range(1,n_vars+1)]  \n",
    "    data = reframed [ contain_vars + ['var1(t)'] + [('var1(t+%d)' % (j)) for j in range(1,n_out)]]\n",
    "    #修改列名\n",
    "    col_names = ['Y', 'X1', 'X2', 'X3']\n",
    "    contain_vars = []\n",
    "    for i in range(n_vars):\n",
    "        contain_vars += [('%s(t-%d)' % (col_names[i], j)) for j in range(1,n_in+1)]  \n",
    "    data.columns = contain_vars +  ['Y(t)'] + [('Y(t+%d)' % (j)) for j in range(1,n_out)]\n",
    "    #分隔数据集，分为训练集和测试集\n",
    "    values = data.values\n",
    "    n_train = round(data.shape[0]*train_proportion)\n",
    "    train = values[:n_train, :]\n",
    "    test = values[n_train:, :]\n",
    "    #分隔输入X和输出y\n",
    "    train_X, train_y = train[:, :n_in*n_vars], train[:, n_in*n_vars:]\n",
    "    test_X, test_y = test[:, :n_in*n_vars], test[:, n_in*n_vars:]\n",
    "    #将输入X改造为LSTM的输入格式，即[samples,timesteps,features]\n",
    "    train_X = train_X.reshape((train_X.shape[0], n_in, n_vars))\n",
    "    test_X = test_X.reshape((test_X.shape[0], n_in, n_vars))\n",
    "    return scaler, data, train_X, train_y, test_X, test_y, dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 1.4 定义拟合LSTM模型的函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "def fit_lstm(data_prepare, n_neurons=50, n_batch=72, n_epoch=100, loss='mae', optimizer='adam', repeats=1):\n",
    "    train_X = data_prepare[2]\n",
    "    train_y = data_prepare[3]\n",
    "    test_X = data_prepare[4]\n",
    "    test_y = data_prepare[5]\n",
    "    model_list = []\n",
    "    for i in range(repeats):\n",
    "        #设计神经网络\n",
    "        model = Sequential()\n",
    "        model.add(LSTM(n_neurons, input_shape=(train_X.shape[1], train_X.shape[2])))\n",
    "        model.add(Dense(train_y.shape[1]))\n",
    "        model.compile(loss=loss, optimizer=optimizer)\n",
    "        #拟合神经网络\n",
    "        history = model.fit(train_X, train_y, epochs=n_epoch, batch_size=n_batch, validation_data=(test_X, test_y), verbose=0, shuffle=False)\n",
    "        #画出学习过程\n",
    "        p1 = pyplot.plot(history.history['loss'], color='blue', label='train')\n",
    "        p2 = pyplot.plot(history.history['val_loss'], color='yellow',label='test')\n",
    "        #保存model\n",
    "        model_list.append(model)\n",
    "    pyplot.legend([\"train\",\"test\"])\n",
    "    pyplot.show()\n",
    "    return model_list"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 1.5 定义预测的函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "def lstm_predict(model, data_prepare):\n",
    "    scaler = data_prepare[0]\n",
    "    test_X = data_prepare[4]\n",
    "    test_y = data_prepare[5]\n",
    "    #做出预测\n",
    "    yhat = model.predict(test_X)\n",
    "    #将测试集上的预测值还原为原来的数据维度\n",
    "    scale_new = MinMaxScaler()\n",
    "    scale_new.min_, scale_new.scale_ = scaler.min_[0], scaler.scale_[0]\n",
    "    inv_yhat = scale_new.inverse_transform(yhat)\n",
    "    #将测试集上的实际值还原为原来的数据维度\n",
    "    inv_y = scale_new.inverse_transform(test_y)\n",
    "    return inv_yhat, inv_y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 1.6 定义预测评价的函数（RMSE）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "# 计算每一步预测的RMSE\n",
    "def evaluate_forecasts(test, forecasts, n_out):\n",
    "    rmse_dic = {}\n",
    "    for i in range(n_out):\n",
    "        actual = [float(row[i]) for row in test]\n",
    "        predicted = [float(forecast[i]) for forecast in forecasts]\n",
    "        rmse = sqrt(mean_squared_error(actual, predicted))\n",
    "        rmse_dic['t+' + str(i+1) + ' RMSE'] = rmse\n",
    "    return rmse_dic"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 1.7 定义将预测可视化的函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "#以原始数据为背景画出预测数据\n",
    "def plot_forecasts(series, forecasts):\n",
    "    #用蓝色画出原始数据集\n",
    "    pyplot.plot(series.values)\n",
    "    n_seq = len(forecasts[0])\n",
    "    #用红色画出预测值\n",
    "    for i in range(1,len(forecasts)+1):\n",
    "        xaxis = [x for x in range(i, i+n_seq+1)]\n",
    "        yaxis = [float(series.iloc[i-1,0])] + list(forecasts[i-1])\n",
    "        pyplot.plot(xaxis, yaxis, color='red')\n",
    "    #展示图像\n",
    "    pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## 二、模型建立"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 2.1 建立模型（n_in = 15，n_neuron = 5，n_batch = 16，n_epoch = 200）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "#### 为了减少随机性，重复建立五次模型，取五次结果的平均作为最后的预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#定义需要的变量\n",
    "filepath = r'导出文件.csv'\n",
    "n_in = 15\n",
    "n_out = 30\n",
    "n_vars = 4\n",
    "n_neuron = 5\n",
    "n_batch = 16\n",
    "n_epoch = 200\n",
    "repeats = 5\n",
    "\n",
    "inv_yhat_list = []\n",
    "inv_y_list = []\n",
    "\n",
    "\n",
    "data_prepare = prepare_data(filepath,n_in, n_out)\n",
    "scaler, data, train_X, train_y, test_X, test_y, dataset = data_prepare\n",
    "model_list = fit_lstm(data_prepare, n_neuron, n_batch, n_epoch,repeats=repeats)\n",
    "for i in range(len(model_list)):\n",
    "    model = model_list[i]\n",
    "    inv_yhat = lstm_predict(model, data_prepare)[0]\n",
    "    inv_y = lstm_predict(model, data_prepare)[1]\n",
    "    inv_yhat_list.append(inv_yhat)\n",
    "    inv_y_list.append(inv_y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "#### 求出平均预测结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "inv_yhat_ave = np.zeros(inv_y.shape)\n",
    "\n",
    "for i in range(repeats):\n",
    "    inv_yhat_ave += inv_yhat_list[i]\n",
    "    \n",
    "inv_yhat_ave = inv_yhat_ave/repeats"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 2.2 模型评价"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "#### 最终平均预测结果inv_yhat_ave的每步预测RMSE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "rmse_dic_list = []\n",
    "for i in range(len(model_list)):\n",
    "    inv_yhat = inv_yhat_list[i]\n",
    "    inv_y = inv_y_list[i]\n",
    "    rmse_dic = evaluate_forecasts(inv_y, inv_yhat, n_out)\n",
    "    rmse_dic_list.append(rmse_dic)\n",
    "\n",
    "rmse_dic_list.append(evaluate_forecasts(inv_y, inv_yhat_ave, n_out))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>第1次</th>\n",
       "      <th>第2次</th>\n",
       "      <th>第3次</th>\n",
       "      <th>第4次</th>\n",
       "      <th>第5次</th>\n",
       "      <th>平均</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>t+1 RMSE</th>\n",
       "      <td>6.054318</td>\n",
       "      <td>5.910827</td>\n",
       "      <td>6.574757</td>\n",
       "      <td>5.514524</td>\n",
       "      <td>5.930769</td>\n",
       "      <td>5.608112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+2 RMSE</th>\n",
       "      <td>6.799496</td>\n",
       "      <td>5.919717</td>\n",
       "      <td>7.129066</td>\n",
       "      <td>5.930466</td>\n",
       "      <td>6.346187</td>\n",
       "      <td>6.065158</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+3 RMSE</th>\n",
       "      <td>6.961642</td>\n",
       "      <td>6.410686</td>\n",
       "      <td>7.275462</td>\n",
       "      <td>6.546540</td>\n",
       "      <td>6.857233</td>\n",
       "      <td>6.618044</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+4 RMSE</th>\n",
       "      <td>7.707383</td>\n",
       "      <td>6.725169</td>\n",
       "      <td>7.962916</td>\n",
       "      <td>7.179770</td>\n",
       "      <td>7.364481</td>\n",
       "      <td>7.175948</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+5 RMSE</th>\n",
       "      <td>8.543821</td>\n",
       "      <td>7.359477</td>\n",
       "      <td>8.997917</td>\n",
       "      <td>7.591111</td>\n",
       "      <td>8.004835</td>\n",
       "      <td>7.831434</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+6 RMSE</th>\n",
       "      <td>8.826944</td>\n",
       "      <td>8.790049</td>\n",
       "      <td>9.158018</td>\n",
       "      <td>8.390160</td>\n",
       "      <td>8.501117</td>\n",
       "      <td>8.547602</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+7 RMSE</th>\n",
       "      <td>9.372653</td>\n",
       "      <td>8.842808</td>\n",
       "      <td>9.847240</td>\n",
       "      <td>8.818847</td>\n",
       "      <td>8.995596</td>\n",
       "      <td>9.000587</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+8 RMSE</th>\n",
       "      <td>9.869172</td>\n",
       "      <td>9.206043</td>\n",
       "      <td>10.790298</td>\n",
       "      <td>9.389183</td>\n",
       "      <td>9.621195</td>\n",
       "      <td>9.657852</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+9 RMSE</th>\n",
       "      <td>10.224256</td>\n",
       "      <td>10.113056</td>\n",
       "      <td>11.275415</td>\n",
       "      <td>9.925362</td>\n",
       "      <td>10.320555</td>\n",
       "      <td>10.177834</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+10 RMSE</th>\n",
       "      <td>10.730779</td>\n",
       "      <td>10.613619</td>\n",
       "      <td>11.738241</td>\n",
       "      <td>10.547615</td>\n",
       "      <td>10.858770</td>\n",
       "      <td>10.750603</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+11 RMSE</th>\n",
       "      <td>11.217751</td>\n",
       "      <td>11.153954</td>\n",
       "      <td>12.502412</td>\n",
       "      <td>11.135731</td>\n",
       "      <td>11.692412</td>\n",
       "      <td>11.458523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+12 RMSE</th>\n",
       "      <td>11.975135</td>\n",
       "      <td>12.117445</td>\n",
       "      <td>13.382915</td>\n",
       "      <td>11.581188</td>\n",
       "      <td>12.537667</td>\n",
       "      <td>12.201281</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+13 RMSE</th>\n",
       "      <td>12.431174</td>\n",
       "      <td>12.648199</td>\n",
       "      <td>14.090454</td>\n",
       "      <td>12.092397</td>\n",
       "      <td>12.351822</td>\n",
       "      <td>12.579149</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+14 RMSE</th>\n",
       "      <td>13.060560</td>\n",
       "      <td>13.141831</td>\n",
       "      <td>14.255130</td>\n",
       "      <td>12.452494</td>\n",
       "      <td>13.279099</td>\n",
       "      <td>13.074444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+15 RMSE</th>\n",
       "      <td>13.879692</td>\n",
       "      <td>13.775036</td>\n",
       "      <td>15.346088</td>\n",
       "      <td>13.138019</td>\n",
       "      <td>13.793227</td>\n",
       "      <td>13.845060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+16 RMSE</th>\n",
       "      <td>14.670389</td>\n",
       "      <td>14.491605</td>\n",
       "      <td>16.118887</td>\n",
       "      <td>13.422946</td>\n",
       "      <td>14.143394</td>\n",
       "      <td>14.421311</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+17 RMSE</th>\n",
       "      <td>15.237153</td>\n",
       "      <td>15.503956</td>\n",
       "      <td>16.679258</td>\n",
       "      <td>13.896419</td>\n",
       "      <td>14.108534</td>\n",
       "      <td>14.909649</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+18 RMSE</th>\n",
       "      <td>15.390742</td>\n",
       "      <td>15.054655</td>\n",
       "      <td>16.010253</td>\n",
       "      <td>14.280028</td>\n",
       "      <td>15.037541</td>\n",
       "      <td>15.060793</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+19 RMSE</th>\n",
       "      <td>16.030557</td>\n",
       "      <td>15.657191</td>\n",
       "      <td>16.441218</td>\n",
       "      <td>14.518066</td>\n",
       "      <td>15.145838</td>\n",
       "      <td>15.417519</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+20 RMSE</th>\n",
       "      <td>15.671409</td>\n",
       "      <td>15.547522</td>\n",
       "      <td>16.150036</td>\n",
       "      <td>14.704495</td>\n",
       "      <td>15.150355</td>\n",
       "      <td>15.359049</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+21 RMSE</th>\n",
       "      <td>15.757660</td>\n",
       "      <td>15.787190</td>\n",
       "      <td>16.898795</td>\n",
       "      <td>14.751765</td>\n",
       "      <td>15.152527</td>\n",
       "      <td>15.546924</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+22 RMSE</th>\n",
       "      <td>15.208240</td>\n",
       "      <td>17.009959</td>\n",
       "      <td>16.376563</td>\n",
       "      <td>14.852501</td>\n",
       "      <td>15.567227</td>\n",
       "      <td>15.670801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+23 RMSE</th>\n",
       "      <td>15.162898</td>\n",
       "      <td>16.254727</td>\n",
       "      <td>16.888183</td>\n",
       "      <td>15.513842</td>\n",
       "      <td>15.526986</td>\n",
       "      <td>15.738396</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+24 RMSE</th>\n",
       "      <td>15.516408</td>\n",
       "      <td>16.282854</td>\n",
       "      <td>16.762683</td>\n",
       "      <td>15.109268</td>\n",
       "      <td>15.232268</td>\n",
       "      <td>15.642263</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+25 RMSE</th>\n",
       "      <td>15.338432</td>\n",
       "      <td>16.417778</td>\n",
       "      <td>16.450235</td>\n",
       "      <td>15.218523</td>\n",
       "      <td>15.879392</td>\n",
       "      <td>15.764465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+26 RMSE</th>\n",
       "      <td>15.215581</td>\n",
       "      <td>16.714160</td>\n",
       "      <td>16.687302</td>\n",
       "      <td>15.704890</td>\n",
       "      <td>15.650851</td>\n",
       "      <td>15.860303</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+27 RMSE</th>\n",
       "      <td>15.410981</td>\n",
       "      <td>16.711455</td>\n",
       "      <td>17.264010</td>\n",
       "      <td>15.838977</td>\n",
       "      <td>15.801374</td>\n",
       "      <td>16.052185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+28 RMSE</th>\n",
       "      <td>15.969366</td>\n",
       "      <td>16.453532</td>\n",
       "      <td>16.564865</td>\n",
       "      <td>15.876696</td>\n",
       "      <td>16.078542</td>\n",
       "      <td>16.110161</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+29 RMSE</th>\n",
       "      <td>16.291474</td>\n",
       "      <td>16.447350</td>\n",
       "      <td>16.771656</td>\n",
       "      <td>15.870124</td>\n",
       "      <td>16.276672</td>\n",
       "      <td>16.236876</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t+30 RMSE</th>\n",
       "      <td>16.122111</td>\n",
       "      <td>16.578749</td>\n",
       "      <td>16.643779</td>\n",
       "      <td>16.260352</td>\n",
       "      <td>16.013707</td>\n",
       "      <td>16.189853</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 第1次        第2次        第3次        第4次        第5次         平均\n",
       "t+1 RMSE    6.054318   5.910827   6.574757   5.514524   5.930769   5.608112\n",
       "t+2 RMSE    6.799496   5.919717   7.129066   5.930466   6.346187   6.065158\n",
       "t+3 RMSE    6.961642   6.410686   7.275462   6.546540   6.857233   6.618044\n",
       "t+4 RMSE    7.707383   6.725169   7.962916   7.179770   7.364481   7.175948\n",
       "t+5 RMSE    8.543821   7.359477   8.997917   7.591111   8.004835   7.831434\n",
       "t+6 RMSE    8.826944   8.790049   9.158018   8.390160   8.501117   8.547602\n",
       "t+7 RMSE    9.372653   8.842808   9.847240   8.818847   8.995596   9.000587\n",
       "t+8 RMSE    9.869172   9.206043  10.790298   9.389183   9.621195   9.657852\n",
       "t+9 RMSE   10.224256  10.113056  11.275415   9.925362  10.320555  10.177834\n",
       "t+10 RMSE  10.730779  10.613619  11.738241  10.547615  10.858770  10.750603\n",
       "t+11 RMSE  11.217751  11.153954  12.502412  11.135731  11.692412  11.458523\n",
       "t+12 RMSE  11.975135  12.117445  13.382915  11.581188  12.537667  12.201281\n",
       "t+13 RMSE  12.431174  12.648199  14.090454  12.092397  12.351822  12.579149\n",
       "t+14 RMSE  13.060560  13.141831  14.255130  12.452494  13.279099  13.074444\n",
       "t+15 RMSE  13.879692  13.775036  15.346088  13.138019  13.793227  13.845060\n",
       "t+16 RMSE  14.670389  14.491605  16.118887  13.422946  14.143394  14.421311\n",
       "t+17 RMSE  15.237153  15.503956  16.679258  13.896419  14.108534  14.909649\n",
       "t+18 RMSE  15.390742  15.054655  16.010253  14.280028  15.037541  15.060793\n",
       "t+19 RMSE  16.030557  15.657191  16.441218  14.518066  15.145838  15.417519\n",
       "t+20 RMSE  15.671409  15.547522  16.150036  14.704495  15.150355  15.359049\n",
       "t+21 RMSE  15.757660  15.787190  16.898795  14.751765  15.152527  15.546924\n",
       "t+22 RMSE  15.208240  17.009959  16.376563  14.852501  15.567227  15.670801\n",
       "t+23 RMSE  15.162898  16.254727  16.888183  15.513842  15.526986  15.738396\n",
       "t+24 RMSE  15.516408  16.282854  16.762683  15.109268  15.232268  15.642263\n",
       "t+25 RMSE  15.338432  16.417778  16.450235  15.218523  15.879392  15.764465\n",
       "t+26 RMSE  15.215581  16.714160  16.687302  15.704890  15.650851  15.860303\n",
       "t+27 RMSE  15.410981  16.711455  17.264010  15.838977  15.801374  16.052185\n",
       "t+28 RMSE  15.969366  16.453532  16.564865  15.876696  16.078542  16.110161\n",
       "t+29 RMSE  16.291474  16.447350  16.771656  15.870124  16.276672  16.236876\n",
       "t+30 RMSE  16.122111  16.578749  16.643779  16.260352  16.013707  16.189853"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_dic = {}\n",
    "for i in range(len(rmse_dic_list) - 1):\n",
    "    df_dic['第' + str(i+1) + '次'] = pd.Series(rmse_dic_list[i])\n",
    "    \n",
    "df_dic['平均'] = pd.Series(rmse_dic_list[i+1])\n",
    "rmse_df = DataFrame(df_dic)\n",
    "rmse_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "#### 最终平均预测结果inv_yhat_ave的每步预测错误率的平均，平均来看，预测结果会比真实结果偏高。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>平均预测错误率</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>超前1步预测</th>\n",
       "      <td>0.046550</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前2步预测</th>\n",
       "      <td>0.047578</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前3步预测</th>\n",
       "      <td>0.050722</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前4步预测</th>\n",
       "      <td>0.052867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前5步预测</th>\n",
       "      <td>0.059091</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前6步预测</th>\n",
       "      <td>0.063377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前7步预测</th>\n",
       "      <td>0.064786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前8步预测</th>\n",
       "      <td>0.064920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前9步预测</th>\n",
       "      <td>0.065614</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前10步预测</th>\n",
       "      <td>0.066760</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前11步预测</th>\n",
       "      <td>0.074791</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前12步预测</th>\n",
       "      <td>0.077122</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前13步预测</th>\n",
       "      <td>0.076288</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前14步预测</th>\n",
       "      <td>0.076228</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前15步预测</th>\n",
       "      <td>0.085402</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前16步预测</th>\n",
       "      <td>0.089160</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前17步预测</th>\n",
       "      <td>0.090592</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前18步预测</th>\n",
       "      <td>0.096903</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前19步预测</th>\n",
       "      <td>0.099449</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前20步预测</th>\n",
       "      <td>0.096841</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前21步预测</th>\n",
       "      <td>0.099562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前22步预测</th>\n",
       "      <td>0.100283</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前23步预测</th>\n",
       "      <td>0.093786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前24步预测</th>\n",
       "      <td>0.091290</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前25步预测</th>\n",
       "      <td>0.091107</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前26步预测</th>\n",
       "      <td>0.086526</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前27步预测</th>\n",
       "      <td>0.086098</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前28步预测</th>\n",
       "      <td>0.085978</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前29步预测</th>\n",
       "      <td>0.085980</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>超前30步预测</th>\n",
       "      <td>0.077837</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          平均预测错误率\n",
       "超前1步预测   0.046550\n",
       "超前2步预测   0.047578\n",
       "超前3步预测   0.050722\n",
       "超前4步预测   0.052867\n",
       "超前5步预测   0.059091\n",
       "超前6步预测   0.063377\n",
       "超前7步预测   0.064786\n",
       "超前8步预测   0.064920\n",
       "超前9步预测   0.065614\n",
       "超前10步预测  0.066760\n",
       "超前11步预测  0.074791\n",
       "超前12步预测  0.077122\n",
       "超前13步预测  0.076288\n",
       "超前14步预测  0.076228\n",
       "超前15步预测  0.085402\n",
       "超前16步预测  0.089160\n",
       "超前17步预测  0.090592\n",
       "超前18步预测  0.096903\n",
       "超前19步预测  0.099449\n",
       "超前20步预测  0.096841\n",
       "超前21步预测  0.099562\n",
       "超前22步预测  0.100283\n",
       "超前23步预测  0.093786\n",
       "超前24步预测  0.091290\n",
       "超前25步预测  0.091107\n",
       "超前26步预测  0.086526\n",
       "超前27步预测  0.086098\n",
       "超前28步预测  0.085978\n",
       "超前29步预测  0.085980\n",
       "超前30步预测  0.077837"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = inv_yhat_ave[0].shape\n",
    "erro_rate = np.zeros(s)\n",
    "for i in range(len(inv_y)):\n",
    "    erro_rate += inv_yhat_ave[i]/inv_y[i]-1\n",
    "\n",
    "erro_rate_ave = erro_rate/len(inv_y)\n",
    "err_df = DataFrame(pd.Series(erro_rate_ave))\n",
    "err_df.columns = ['平均预测错误率']\n",
    "err_df.index = ['超前%d步预测' % (i+1) for i in range(n_out)]\n",
    "err_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 2.3 预测结果可视化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "#### 测试集的前十个样本"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataset = data_prepare[6]\n",
    "test_X = data_prepare[4]\n",
    "n_real = len(dataset)-len(test_X)-len(inv_yhat_ave[0])\n",
    "#多画一个\n",
    "y_real = DataFrame(dataset['Y'][n_real:n_real+10+30])\n",
    "plot_forecasts(y_real, inv_yhat_ave[0:10])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "#### 整个测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_real = len(dataset)-len(test_X)-len(inv_yhat[0])\n",
    "#多画一个\n",
    "y_real = DataFrame(dataset['Y'][n_real:])\n",
    "plot_forecasts(y_real, inv_yhat_ave)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### 2.4 结果导出"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "#### Yhat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "pre_df = DataFrame(inv_yhat_ave)\n",
    "#时间戳处理，让它只显示到日\n",
    "date_index = dataset.index[n_in-1+len(train_X)-1:n_in-1+len(train_X)+len(test_X)-1]\n",
    "pydate_array = date_index.to_pydatetime()\n",
    "date_only_array = np.vectorize(lambda s: s.strftime('%Y-%m-%d'))(pydate_array )\n",
    "date_only_series = pd.Series(date_only_array)\n",
    "pre_df = pre_df.set_index(date_only_series)\n",
    "names_columns = ['未来%d期' % (i+1) for i in range(n_out)]\n",
    "pre_df.columns = names_columns\n",
    "pre_df = pre_df.round(decimals=2)#小数点"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "#### Y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "actual_df = DataFrame(inv_y)\n",
    "names_columns = ['未来%d期' % (i+1) for i in range(n_out)]\n",
    "actual_df.columns = names_columns\n",
    "actual_df = actual_df.set_index(date_only_series)\n",
    "actual_df = actual_df.round(decimals=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "#### 导出xlsx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "writer = pd.ExcelWriter('Y-结果导出.xlsx')\n",
    "pre_df.to_excel(writer,\"Yhat\")\n",
    "actual_df.to_excel(writer,\"Y\")\n",
    "writer.save()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## 参考资料：\n",
    "https://machinelearningmastery.com/multivariate-time-series-forecasting-lstms-keras/\n",
    "\n",
    "https://machinelearningmastery.com/multi-step-time-series-forecasting-long-short-term-memory-networks-python/\n",
    "\n",
    "https://blog.csdn.net/qq_28031525/article/details/79046718\n",
    "\n",
    "https://cloud.tencent.com/developer/article/1645547\n",
    "\n",
    "https://machinelearningmastery.com/update-lstm-networks-training-time-series-forecasting/"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
